package common

import (
	"errors"
	"io"
	"net"
	"syscall"
)

// IsConnectionError 检查错误是否为网络连接错误
//
// 网络连接错误包括：
//   - EOF (连接关闭)
//   - Connection reset
//   - Broken pipe
//   - Connection refused
//
// 返回：
//   - true: 是网络连接错误
//   - false: 不是网络连接错误
func IsConnectionError(err error) bool {
	if err == nil {
		return false
	}

	// EOF 表示连接关闭
	if errors.Is(err, io.EOF) {
		return true
	}

	// 检查网络操作错误
	var netErr *net.OpError
	if errors.As(err, &netErr) {
		return true
	}

	// 检查系统调用错误
	if errors.Is(err, syscall.ECONNRESET) ||
		errors.Is(err, syscall.EPIPE) ||
		errors.Is(err, syscall.ECONNREFUSED) {
		return true
	}

	return false
}
